﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SisVenda.Business;
using SisVenda.Data;
using System.Data;
using System.Collections;
using System.Reflection;
using Froggy.Data;

namespace SisVenda.Web.Restrito.Fn
{
    [System.ComponentModel.DataObject(true)]
    public class CadastroFornecedorFn
    {
        private int end_idI = 0;
        #region Select
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
        public DataTable ObterFornecedorID(int pes_id)
        {
            #region SQL

            string sql = @"SELECT * 
                           FROM pes_pessoa p
                           INNER JOIN Fornecedor f on f.Pessoa_IdPessoa= p.IdPessoa
                           INNER JOIN TipoTelefone tf on tf.IdTipoTelefone = p.TipoTelefone_IdTipoTelefone
                           INNER JOIN Endereco e on e.IdEndereco = p.Endereco_IdEndereco
                           INNER JOIN Cidade ci on ci.IdCidade = e.Cidade_IdCidade
                           INNER JOIN Uf u on u.UfNome = ci.Uf_UfNome
                           WHERE p.IdPessoa = @pes_id";

            #endregion
            DbCommandUtil db = new DbCommandUtil(sql);
            db.AddParameter("@pes_id", DbType.Int32, pes_id);
            return db.GetDataTable();
        }

        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
        public DataTable ObterFornecedor(string pes_nome, string pes_cnpj)
        {
            #region SQL

            string sql = @"SELECT * 
                           FROM Pessoa p
                           INNER JOIN Fornecedor f on f.Pessoa_IdPessoa= p.IdPessoa
                           INNER JOIN TipoTelefone tf on tf.IdTipoTelefone = p.TipoTelefone_IdTipoTelefone
                           INNER JOIN Endereco e on e.IdEndereco = p.Endereco_IdEndereco
                           INNER JOIN Cidade ci on ci.IdCidade = e.Cidade_IdCidade
                           INNER JOIN Uf u on u.UfNome = ci.Uf_UfNome
                           WHERE p.Nome LIKE @pes_nome or p.CNPJ LIKE @pes_cnpj
                         ";

            #endregion
            DbCommandUtil db = new DbCommandUtil(sql);
            db.AddParameter("@pes_nome", DbType.String, "%" + pes_nome + "%");
            db.AddParameter("@pes_cnpj", DbType.String, "%" + pes_cnpj + "%");
            return db.GetDataTable();
        }
        #endregion

        #region Endereco_Insert_Update

        private Boolean InsertEndereco(string end_descricao, string end_bairro, int end_numero, string end_cep, int cid_id)
        {
            EnderecoBo enderecos = new EnderecoBo();
            Endereco endereco = new Endereco();

            endereco.Descricao = end_descricao;
            endereco.Bairro = end_bairro;
            endereco.Numero = end_numero;
            endereco.Cep = end_cep;
            endereco.Cidade_IdCidade = cid_id;

            enderecos.Add(endereco);

            try
            {
                enderecos.SaveChanges();

                end_idI = endereco.IdEndereco;
                endereco = null;
                enderecos = null;
                return true;

            }
            catch
            {
                endereco = null;
                enderecos = null;
                return false;
            }

        }

        public Boolean UpdateEndereco(int end_id, string end_descricao, string end_bairro, int end_numero, string end_cep, int cid_id)
        {
            EnderecoBo enderecos = new EnderecoBo();
            Endereco endereco = new Endereco();

            endereco = enderecos.Find(end => end.IdEndereco == end_id).First<Endereco>();

            endereco.Descricao = end_descricao;
            endereco.Bairro = end_bairro;
            endereco.Numero = end_numero;
            endereco.Cep = end_cep;
            endereco.Cidade_IdCidade = cid_id;

            enderecos.Update(endereco);

            try
            {
                enderecos.SaveChanges();
                endereco = null;
                enderecos = null;
                return true;
            }
            catch
            {
                endereco = null;
                enderecos = null;
                return false;
            }

        }

        #endregion

        #region Fornecedor_Insert_Update
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Insert)]
        public Boolean InsertPessoa(string pes_nome, string pes_cpf, string pes_rg, string pes_cnpj, string pes_inscricaoEstadual, string pes_sexo, string pes_tipoPessoa, DateTime pes_dataNascimento,
                                    string pes_estadoCivil, string pes_telefone, string pes_celular, string pes_fax, string pes_email, string end_descricao, string end_bairro, int end_numero, string end_cep, int cid_id,
                                    int car_id, int tte_id)
        {
            PessoaBo pessoas = new PessoaBo();
            Pessoa pessoa = new Pessoa();
            FornecedorBo fornecedores = new FornecedorBo();
            Fornecedor fornecedor = new Fornecedor();

            pessoa.Nome = pes_nome;
            pessoa.CPF = pes_cpf;
            pessoa.RG = pes_rg;
            pessoa.CNPJ = pes_cnpj;
            pessoa.InscricaoEstadual = pes_inscricaoEstadual;
            pessoa.Sexo = pes_sexo;
            pessoa.TipoPessoa = pes_tipoPessoa;
            pessoa.DataNascimento = pes_dataNascimento.Date;
            pessoa.EstadoCivil = pes_estadoCivil;
            pessoa.Telefone = pes_telefone;
            pessoa.Celular = pes_celular;
            pessoa.Fax = pes_fax;
            pessoa.Email = pes_email;
            pessoa.Endereco_IdEndereco = end_idI;
            pessoa.TipoTelefone_IdTipoTelefone = tte_id;
            pessoas.Add(pessoa);
            try
            {

                pessoas.SaveChanges();
                fornecedor.Pessoa_IdPessoa = pessoa.IdPessoa;
                fornecedores.Add(fornecedor);
                fornecedores.SaveChanges();
                end_idI = 0;
                pessoas = null; pessoa = null; fornecedores = null; fornecedor = null;
                return true;
            }
            catch { pessoas = null; pessoa = null; fornecedores = null; ;return false; }

        }

        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Update)]
        public Boolean UpdatePessoa(int pes_id, int end_id, string pes_nome, string pes_cpf, string pes_rg, string pes_cnpj, string pes_inscricaoEstadual, string pes_sexo, string pes_tipoPessoa, DateTime pes_dataNascimento,
                                    string pes_estadoCivil, string pes_telefone, string pes_celular, string pes_fax, string pes_email, string end_descricao, string end_bairro, int end_numero, string end_cep, int cid_id,
                                    int car_id,int tte_id)
        {
            PessoaBo pessoas = new PessoaBo();
            Pessoa pessoa = new Pessoa();

            UpdateEndereco(end_id, end_descricao, end_bairro, end_numero, end_cep, cid_id);
            pessoa = pessoas.Find(pes => pes.IdPessoa == pes_id).First<Pessoa>();

            pessoa.Nome = pes_nome;
            pessoa.CPF = pes_cpf;
            pessoa.RG = pes_rg;
            pessoa.CNPJ = pes_cnpj;
            pessoa.InscricaoEstadual = pes_inscricaoEstadual;
            pessoa.Sexo = pes_sexo;
            pessoa.TipoPessoa = pes_tipoPessoa;
            pessoa.DataNascimento = pes_dataNascimento.Date;
            pessoa.EstadoCivil = pes_estadoCivil;
            pessoa.Telefone = pes_telefone;
            pessoa.Celular = pes_celular;
            pessoa.Fax = pes_fax;
            pessoa.Email = pes_email;
            pessoa.TipoTelefone_IdTipoTelefone = tte_id;
            pessoas.Update(pessoa);
            try
            {

                pessoas.SaveChanges();
                end_idI = 0;
                pessoas = null; pessoa = null;
                return true;
            }
            catch { pessoas = null; pessoa = null; return false; }
        }

        #endregion
    }
}